7. Local Node-Level Measures

Assistant Prof. Dr. Siwachoat Srisuttiyakorn

Department of Educational Research and Psychology
Faculty of Education Chulalongkorn University

2025-03-16

Outline

บทเรียนนี้จะกล่าวถึงตัวชี้วัดคุณลักษณะของเครือข่ายระดับบุคคล (local-level measures)

  • Ego-network measures (local measures) – ทำความเข้าใจคุณลักษณะของเครือข่ายรอบโหนด/บุคคล

  • Centrality measures – การวัดตำแหน่งของโหนดเชิงศูนย์กลาง

1. Ego-network measures

  • Social Capital – คุณลักษณะของโหนดหรือความสัมพันธ์ในเครือข่ายช่วยสร้างโอกาสหรือความได้เปรียบในการประสบความสำเร็จ อย่างไร

  • Social Influence – โหนดแต่ละโหนดได้รับอิทธิพลจาก Alters อย่างไรในเชิงของความเชื่อ ทัศนคติ บรรทัดฐานทางสังคม พฤติกรรม แนวปฏิบัติ หรือเงื่อนไขต่าง ๆ

ตัวชี้วัด local node-level ทำหน้าที่เป็นได้ทั้ง ตัวแปรอิสระเพื่อทำนายผลลัพธ์ที่สนใจ และถูกวิเคราะห์เป็นตัวแปรตามก็ได้ เพื่ออธิบาย/ค้นหาตัวแปรอิสระที่มีความสัมพันธ์หรือเป็นสาเหตุของคุณลักษณะของเครือข่ายระดับโหนดนี้

  • โหนดที่มีเครือข่ายกว้างขวาง (popularity สูง) —> ประสบความสำเร็จสูง

  • มีปัจจัยใดที่ทำให้บุคคล/โหนดมีความ popularity สูง?

1. Ego-network measures

  • Egonet – เครือข่ายย่อยที่เป็นส่วนหนึ่งของเครือข่ายทั้งหมด ประกอบด้วย โหนดที่เรียกว่า ego และโหนดอื่น ๆ ที่เชื่อมโยงกับ ego โดยตรง เรียกว่า alters

  • การเก็บรวบรวมข้อมูลของ egonet สามารถทำได้ 2 ลักษณะ

    • personal-network research design

    • whole-network research design

1. Ego-network measures

  • Tie composition — ลักษณะความสัมพันธ์ที่ ego มีกับ alters

    • จำนวน/สัดส่วนของความสัมพันธ์แต่ละประเภทของ ego

    • ค่าเฉลี่ย/ค่าสูงสุด/มัธยฐานของระดับความสัมพันธ์/ระยะเวลาความสัมพันธ์

  • Alter composition — คุณลักษณะของ alters ที่ ego ไปมีความสัมพันธ์ด้วย

    • จำนวน/สัดส่วนของ alter แต่ละประเภทที่ ego มี

    • ค่าเฉลี่ย/ค่าสูงสุด/มัธยฐานของคุณลักษณะเชิงปริมาณของ alter

1. Ego-network measures

  • Ego-alter similarity — ความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่สนใจ

    • selection: ego สร้างความสัมพันธ์กับบุคลที่มีคุณลักษณะคล้ายกับตัวเองตั้งแต่แรก

    • inflluence: ego มีปฏิสัมพันธ์กับ alter ไประยะเวลาหนึ่งทำให้เกิดการเปลี่ยนแปลงตนเองให้คล้ายกับ alter มากขึ้น

      • เพศ สาขาวิชา กิจกรรมที่ชอบเข้าร่วม รายวิชาเลือกที่ลงทะเบียน/ชอบ —> แนวโน้ม/จำนวนของ ties ของ ego กับ alters ที่มีคุณลักษณะเหมือนกัน

      • ค่าเฉลี่ย/summary stat ของความคล้ายคลึงระหว่างคุณลักษณะของ ego กับ alters เช่น ค่าเฉลี่ยความแตกต่างของอายุ /จำนวนชั่วโมงการอ่านหนังสือ ระหว่าง ego กับ alter

      • correlation ระหว่างการมี/ไม่มี ties กับความคล้ายคลึงหรือความแตกต่างของคุณลักษณะ

1. Ego-network measures

  • Ego-network structure — เน้นอธิบายรูปร่าง (shape) และความเชื่อมโยงกัน (cohesiveness) ของเครือข่ายรอบ ego

    • structural hole

    • bridging between alters

    • ตัวชี้วัดสำหรับ whole network หลายตัวก็สามารถนำมาประยุกต์ใช้ได้ เช่น density, centralization, number of components, average distance

2. Tie Composition: Degree

  • ประเภทและระดับความสัมพันธ์ระหว่าง ego กับ alters

  • Binary network data: กำหนดให้ \(x_{ijq}\) แทนความสัมพันธ์ q ระหว่าง ego ที่ i กับ alter ที่ j โดยที่ \(x_{ijq} = 1\) หมายถึงมีความสัมพันธ์ จำนวนความสัมพันธ์แต่ละประเภทที่ ego i มี สามารถเขียนได้ดังนี้ (จำนวนความสัมพันธ์ของ node นี้เรียกว่า degree ของ ego)

\[ d_{iq} = \sum_{j} x_{ijq} \]

2. Tie Composition: Agresti’s index

  • วัดระดับของความแตกต่าง (heterogeneity) ของความสัมพันธ์ที่แต่ละ ego มี

  • มีค่าอยู่ในช่วง 0-1 ใกล้ 1 แสดงว่าเครือข่ายของ ego มีความหลากหลายสูง

\[ IQV = \frac{1-\sum_{q=1}^{Q} p_{iq}^{2}}{1-\frac{1}{Q}} \]

โดยที่ \(p_{iq}\) คือ สัดส่วนของความสัมพันธ์แบบ q ที่ ego i มี กล่าวคือเท่ากับ จำนวน degree หารด้วยผลรวมของ degree ทั้งหมดของ ego i ในทุกความสัมพันธ์ ส่วน \(Q\) คือจำนวนประเภทของความสัมพันธ์ทั้งหมด

### calculate ego IQV: รับ data.frame ของ degree
### คอลัมน์แรกต้องเป็น node name
### คอลัมน์ที่เหลือเป็น degree ของ ego แต่ละประเภท
ego_iqv <- function(degree_df) {
  degree_df %>%
    pivot_longer(cols = -1, names_to = "Tie", values_to = "Outdegree") %>%
    group_by(node) %>%
    mutate(Q = length(Outdegree),
           p = Outdegree / sum(Outdegree),
           ) %>% 
    reframe(
              IQV = (1 - sum(p^2)) / (1 - 1/Q)) %>%
    ungroup() %>% 
    unique()
}

degree_df %>% 
  rownames_to_column("node") %>% 
  ego_iqv() %>% 
  bind_cols(degree_df)
# A tibble: 14 × 8
   node    IQV outdegree_game outdeg_conflict outdeg_friendship
 * <chr> <dbl>          <dbl>           <dbl>             <dbl>
 1 I1    0.686              4               0                 1
 2 I3    0                  0               0                 0
 3 S1    0.881              6               0                 3
 4 S2    0.6                5               0                 0
 5 S4    0.917              6               0                 4
 6 W1    0.845              6               4                 3
 7 W2    0.732              5               3                 0
 8 W3    0.674              3               7                 0
 9 W4    0.905              5               5                 3
10 W5    0.892              4               5                 3
11 W6    0.911              4               5                 3
12 W7    0.96               5               5                 4
13 W8    0.811              0               0                 0
14 W9    0.919              3               4                 2
# ℹ 3 more variables: outdeg_antagonistic <dbl>, outdeg_help <dbl>,
#   outdeg_trade <dbl>

2. Tie Composition: Agresti’s index

degree_df <- data.frame(
outdegree_game = Hawthorne_BankWiring$Game %>% 
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_conflict = Hawthorne_BankWiring$Conflict %>% 
  graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_friendship = Hawthorne_BankWiring$Friendship %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_antagonistic = Hawthorne_BankWiring$Antagonistic %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_help = Hawthorne_BankWiring$Help %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_trade = Hawthorne_BankWiring$TradeJobs %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out")

)
# A tibble: 14 × 2
   node    IQV
   <chr> <dbl>
 1 I1    0.686
 2 I3    0    
 3 S1    0.881
 4 S2    0.6  
 5 S4    0.917
 6 W1    0.845
 7 W2    0.732
 8 W3    0.674
 9 W4    0.905
10 W5    0.892
11 W6    0.911
12 W7    0.96 
13 W8    0.811
14 W9    0.919

3. Valued Tie Composition

  • กรณีที่เรามีข้อมูลความสัมพันธ์ที่มีค่าเชิงปริมาณ (valued tie data) ตัวชี้วัดระดับ/ความแข็งแรงของความสัมพันธ์ที่ ego มีต่อ alters สามารถทำได้โดยใช้ summary stat ของค่าความสัมพันธ์ดังกล่าว เช่น ค่าเฉลี่ย หรือมัธยฐาน หรือปริมาณอื่น ๆ ที่สะท้อนความสัมพันธ์หรือการสื่อสารทั้งหมดที่ ego มีกับ alters
# ฟังก์ชันสร้างตารางสรุปสำหรับแต่ละโหนด
### ข้อมูลนำเข้า `graph` ต้องเป็น weight igraph object
create_summary_table <- function(graph) {
  # ดึงค่าทั้งหมดของ strength (น้ำหนักรวมของเส้นเชื่อมแต่ละโหนด)
  node_strengths <- strength(graph, mode = "all", weights = E(graph)$weight)
  
  # ดึง alter ของแต่ละโหนด (degree)
  num_alters <- degree(graph, mode = "all")

  # ดึงน้ำหนักของเส้นเชื่อม (tie strengths) เป็นรายการของแต่ละโหนด
  tie_strength_list <- lapply(V(graph), function(v) {
    incident_edges <- E(graph)[incident(graph, v, mode = "all")]
    edge_weights <- incident_edges$weight
    if (length(edge_weights) == 0) return(NA) # กรณีโหนดไม่มี edge
    return(edge_weights)
  })
  
  # สร้าง DataFrame
  summary_df <- data.frame(
    Node = V(graph)$name,  
    Number_of_alters = num_alters,
    Sum_of_tie_strengths = node_strengths,
    Average_tie_strength = sapply(tie_strength_list, mean, na.rm = TRUE),
    SD_tie_strength = sapply(tie_strength_list, sd, na.rm = TRUE),
    Median_tie_strength = sapply(tie_strength_list, median, na.rm = TRUE),
    Minimum_tie_strength = sapply(tie_strength_list, min, na.rm = TRUE),
    Maximum_tie_strength = sapply(tie_strength_list, max, na.rm = TRUE),
    Range_of_tie_strength = sapply(tie_strength_list, function(x) max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
  )
  
  return(summary_df)
}

3. Valued Tie Composition

    Node Number_of_alters Sum_of_tie_strengths Average_tie_strength
A01  A01               16                   42             2.625000
A02  A02                9                   29             3.222222
A03  A03               10                   33             3.300000
A04  A04                6                   18             3.000000
A05  A05                3                    8             2.666667
A06  A06                4                   14             3.500000
A07  A07                4                   13             3.250000
A08  A08                4                   13             3.250000
A09  A09                5                   17             3.400000
A10  A10                2                    3             1.500000
A11  A11                3                    8             2.666667
A12  A12                1                    3             3.000000
A13  A13                2                    4             2.000000
A14  A14                5                   17             3.400000
A15  A15                2                    5             2.500000
A16  A16                2                    7             3.500000
A17  A17                2                    6             3.000000
A18  A18                2                    3             1.500000
A19  A19                2                    3             1.500000
A20  A20                3                    5             1.666667
A21  A21                2                    4             2.000000
A22  A22                2                    4             2.000000
A23  A23                2                    5             2.500000
A24  A24                5                   21             4.200000
A25  A25                3                    7             2.333333
A26  A26                3                   14             4.666667
A27  A27                2                    6             3.000000
A28  A28                4                   13             3.250000
A29  A29                3                    6             2.000000
A30  A30                4                   13             3.250000
A31  A31                4                   11             2.750000
A32  A32                6                   21             3.500000
A33  A33               12                   38             3.166667
A34  A34               17                   48             2.823529
    SD_tie_strength Median_tie_strength Minimum_tie_strength
A01       0.9574271                 2.5                    1
A02       1.6414763                 3.0                    1
A03       1.6363917                 3.0                    1
A04       0.0000000                 3.0                    3
A05       0.5773503                 3.0                    2
A06       1.0000000                 3.0                    3
A07       1.2583057                 3.0                    2
A08       0.9574271                 3.5                    2
A09       1.1401754                 3.0                    2
A10       0.7071068                 1.5                    1
A11       0.5773503                 3.0                    2
A12              NA                 3.0                    3
A13       1.4142136                 2.0                    1
A14       0.8944272                 3.0                    3
A15       0.7071068                 2.5                    2
A16       0.7071068                 3.5                    3
A17       0.0000000                 3.0                    3
A18       0.7071068                 1.5                    1
A19       0.7071068                 1.5                    1
A20       0.5773503                 2.0                    1
A21       1.4142136                 2.0                    1
A22       0.0000000                 2.0                    2
A23       0.7071068                 2.5                    2
A24       0.8366600                 4.0                    3
A25       0.5773503                 2.0                    2
A26       2.5166115                 5.0                    2
A27       1.4142136                 3.0                    2
A28       0.9574271                 3.5                    2
A29       0.0000000                 2.0                    2
A30       0.9574271                 3.5                    2
A31       0.5000000                 3.0                    2
A32       1.9748418                 3.0                    2
A33       1.1934163                 3.0                    1
A34       1.1850788                 3.0                    1
    Maximum_tie_strength Range_of_tie_strength
A01                    5                     4
A02                    6                     5
A03                    6                     5
A04                    3                     0
A05                    3                     1
A06                    5                     2
A07                    5                     3
A08                    4                     2
A09                    5                     3
A10                    2                     1
A11                    3                     1
A12                    3                     0
A13                    3                     2
A14                    5                     2
A15                    3                     1
A16                    4                     1
A17                    3                     0
A18                    2                     1
A19                    2                     1
A20                    2                     1
A21                    3                     2
A22                    2                     0
A23                    3                     1
A24                    5                     2
A25                    3                     1
A26                    7                     5
A27                    4                     2
A28                    4                     2
A29                    2                     0
A30                    4                     2
A31                    3                     1
A32                    7                     5
A33                    5                     4
A34                    5                     4
g <- Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE)

Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE) %>% 
  plot(
    edge.width = E(.)$weight > 4
    )

3. Valued Tie Composition

## strength dataset
valued_g <- Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE)

create_summary_table(g)
    Node Number_of_alters Sum_of_tie_strengths Average_tie_strength
A01  A01               16                   42             2.625000
A02  A02                9                   29             3.222222
A03  A03               10                   33             3.300000
A04  A04                6                   18             3.000000
A05  A05                3                    8             2.666667
A06  A06                4                   14             3.500000
A07  A07                4                   13             3.250000
A08  A08                4                   13             3.250000
A09  A09                5                   17             3.400000
A10  A10                2                    3             1.500000
A11  A11                3                    8             2.666667
A12  A12                1                    3             3.000000
A13  A13                2                    4             2.000000
A14  A14                5                   17             3.400000
A15  A15                2                    5             2.500000
A16  A16                2                    7             3.500000
A17  A17                2                    6             3.000000
A18  A18                2                    3             1.500000
A19  A19                2                    3             1.500000
A20  A20                3                    5             1.666667
A21  A21                2                    4             2.000000
A22  A22                2                    4             2.000000
A23  A23                2                    5             2.500000
A24  A24                5                   21             4.200000
A25  A25                3                    7             2.333333
A26  A26                3                   14             4.666667
A27  A27                2                    6             3.000000
A28  A28                4                   13             3.250000
A29  A29                3                    6             2.000000
A30  A30                4                   13             3.250000
A31  A31                4                   11             2.750000
A32  A32                6                   21             3.500000
A33  A33               12                   38             3.166667
A34  A34               17                   48             2.823529
    SD_tie_strength Median_tie_strength Minimum_tie_strength
A01       0.9574271                 2.5                    1
A02       1.6414763                 3.0                    1
A03       1.6363917                 3.0                    1
A04       0.0000000                 3.0                    3
A05       0.5773503                 3.0                    2
A06       1.0000000                 3.0                    3
A07       1.2583057                 3.0                    2
A08       0.9574271                 3.5                    2
A09       1.1401754                 3.0                    2
A10       0.7071068                 1.5                    1
A11       0.5773503                 3.0                    2
A12              NA                 3.0                    3
A13       1.4142136                 2.0                    1
A14       0.8944272                 3.0                    3
A15       0.7071068                 2.5                    2
A16       0.7071068                 3.5                    3
A17       0.0000000                 3.0                    3
A18       0.7071068                 1.5                    1
A19       0.7071068                 1.5                    1
A20       0.5773503                 2.0                    1
A21       1.4142136                 2.0                    1
A22       0.0000000                 2.0                    2
A23       0.7071068                 2.5                    2
A24       0.8366600                 4.0                    3
A25       0.5773503                 2.0                    2
A26       2.5166115                 5.0                    2
A27       1.4142136                 3.0                    2
A28       0.9574271                 3.5                    2
A29       0.0000000                 2.0                    2
A30       0.9574271                 3.5                    2
A31       0.5000000                 3.0                    2
A32       1.9748418                 3.0                    2
A33       1.1934163                 3.0                    1
A34       1.1850788                 3.0                    1
    Maximum_tie_strength Range_of_tie_strength
A01                    5                     4
A02                    6                     5
A03                    6                     5
A04                    3                     0
A05                    3                     1
A06                    5                     2
A07                    5                     3
A08                    4                     2
A09                    5                     3
A10                    2                     1
A11                    3                     1
A12                    3                     0
A13                    3                     2
A14                    5                     2
A15                    3                     1
A16                    4                     1
A17                    3                     0
A18                    2                     1
A19                    2                     1
A20                    2                     1
A21                    3                     2
A22                    2                     0
A23                    3                     1
A24                    5                     2
A25                    3                     1
A26                    7                     5
A27                    4                     2
A28                    4                     2
A29                    2                     0
A30                    4                     2
A31                    3                     1
A32                    7                     5
A33                    5                     4
A34                    5                     4

3. Valued Tie Composition

a26_g <- valued_g %>% make_ego_graph(order = 1, nodes = "A26")
a26_g[[1]] %>% 
  plot(
    edge.width = E(a26_g[[1]])$weight,
  )

create_summary_table(valued_g) %>% 
  pivot_longer(cols = -Node, names_to = "type", values_to = "value") %>%
  ggplot(aes(x=value, y=0))+
  geom_boxplot(outlier.alpha = 0)+
  geom_jitter(height = 0.1, aes(col = factor(ifelse(Node == "A26",1,0))))+
  facet_wrap(~type, scales = "free")+
  theme(legend.position = "none")

3. Valued Tie Composition

4. Alter Composition

ตัวชี้วัดกลุ่มนี้มีวัตถุประสงค์เพื่อทำความเข้าใจว่า ego แต่ละตัวมีการเชื่อมโยง/สัมพันธ์กับ alters ประเภทไหนบ้าง

  • categorical attributes

  • continuous attributes

categorical attributes

ตัวอย่างเครือข่ายความเป็นเพื่อนในบริษัท เรามีวัตถุประสงค์ต้องการวิเคราะห์ว่า ego แต่ละคนมีเพื่อนอยู่ในแผนกใดบ้างของบริษัท

# A tibble: 21 × 13
# Groups:   ego, department_ego [21]
   ego   department_ego     IQV freq_0 freq_1 freq_2 freq_3 freq_4  prop_0
   <chr>          <int>   <dbl>  <int>  <int>  <int>  <int>  <int>   <dbl>
 1 A01                4   0.6        0      2      0      0      3   0    
 2 A02                4   0.833      0      1      0      1      1   0    
 3 A03                2   0          0      0      2      0      0   0    
 4 A04                4   0.625      0      3      0      0      3   0    
 5 A05                2   0.867      0      2      3      1      1   0    
 6 A06                1   0.833      1      3      1      0      1   0.167
 7 A07                0 NaN          0      0      0      0      0   0    
 8 A08                1   0          0      0      0      0      1   0    
 9 A09                2 NaN          0      0      0      0      0 NaN    
10 A10                3   0.714      0      2      4      0      1   0    
# ℹ 11 more rows
# ℹ 4 more variables: prop_1 <dbl>, prop_2 <dbl>, prop_3 <dbl>, prop_4 <dbl>

continuous attribute

แนวทางข้างต้นสามารถนำมาใช้กับ attribute แบบต่อเนื่องได้ เช่น ระยะเวลาทำงานในองค์กร (tenue)

  • จำนวนระยะเวลาทำงานโดยเฉลี่ยของ alter (เพื่อนร่วมงาน) ของแต่ละ ego <— ระยะเวลาทำงานของ alter สะท้อนแหล่งทรัพยากร/ระดับความเชี่ยวชาญของผู้เชี่ยวชาญที่ ego สามารถเข้าถึงได้
# A tibble: 19 × 8
   ego   num_friend sum_tenure mean_tenure sd_tenure min_tenure max_tenure
   <chr>      <int>      <dbl>       <dbl>     <dbl>      <dbl>      <dbl>
 1 A01            5       52.0       10.4       5.67       4.67       19.6
 2 A02            3       30.9       10.3       1.90       9.08       12.5
 3 A03            2       15.3        7.63      3.95       4.83       10.4
 4 A04            6       66.2       11.0       4.96       4.67       19.6
 5 A05            7       92.2       13.2       7.86       4.83       27  
 6 A06            6       88.8       14.8       8.80       5.42       30  
 7 A08            1        7.5        7.5      NA          7.5         7.5
 8 A10            7       58.1        8.30      3.81       3.33       12.8
 9 A11           13      113.         8.71      4.86       0.25       19.6
10 A12            4       41.8       10.4       2.45       7.5        12.5
11 A13            2       30.3       15.2      16.7        3.33       27  
12 A14            2       38.4       19.2      15.3        8.42       30  
13 A15            8      101.        12.6       9.69       3.33       28  
14 A16            2       28.9       14.5       7.25       9.33       19.6
15 A17           18      225.        12.5       8.20       3.33       30  
16 A18            1       19.6       19.6      NA         19.6        19.6
17 A19            9      111.        12.4       6.97       3.33       27  
18 A20            2       36.1       18.0      12.7        9.08       27  
19 A21            4       50         12.5       4.99       8.92       19.6
# ℹ 1 more variable: range_tenure <dbl>

5. Ego-alter similarity

วัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่สนใจ เช่น การวิเคราะห์ความคล้ายในเชิงของข้อมูลภูมิหลัง บุคลิกภาพ ทัศนคติ พฤติกรรม หรือผลการเรียน จุดที่แตกต่างกันระหว่างการวิเคราะห์ประเภทนี้กับการวิเคราะห์ที่ผ่านมาคือ การวิเคราะห์ความคล้ายคลึงจะต้องใช้ข้อมูลคุณลักษณะของทั้ง ego กับ alter มาวิเคราะห์ร่วมกััน

กระบวนการเชิงสังคมที่ทำให้เกิดความคล้ายคลึงระหว่าง ego กับ alter อาจเกิดจากสองกระบวนการหลัก ได้แก่

  • Social selection : หมายถึงกระบวนการที่ ego เลือกสร้างความสัมพันธ์กับ alter ที่มีลักษณะคล้ายตัวเอง เช่น เพศ เชื้อชาติ ระดับการศึกษา ศาสนา หรืออื่น ๆ ปรากฏการณ์นี้เรียกว่า homophily (การคบหาคนที่เหมือนตนเอง)

  • Social influence : หมายถึงกระบวนการที่ ego และ alters มีแนวโน้มที่จะปรับเปลี่ยนพฤติกรรม หรือคุณลักษณะต่าง ๆ ให้คล้ายคลึงกันมากขึ้นเมื่ออยู่ร่วมกันไปนาน ๆ เช่น แฟนกันมักมีพฤติกรรมที่คล้ายกันมากขึ้นเมื่ออยู่ร่วมกันไปนาน ๆ หรือเพื่อนร่วมห้องเรียนเดียวกันที่อาจมีพฤติกรรมบางประการที่เปลี่ยนให้เหมือนกัน

ในทำนองเดียวกับการวิเคราะห์ส่วนอื่น ความคล้ายคลึงดังกล่าวจำแนกการวิเคราะห์ตามประเภทของข้อมูลดังนี้

  • Categorical attributes

  • Continuous attributes

5.1 categorical attributes

มีหลายตัวชี้วัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของตัวแปรจัดประเภท ได้แก่

  • จำนวนเพื่อนร่วมงานที่อยู่ใน department เดียวกับ ego (a)

  • จำนวนเพื่อนร่วมงานที่อยู่คนละ department กับ ego (b)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่ department เดียวกับ ego (c)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่คนละ department กับ ego (d)

  • สัดส่วน alter ที่อยู่ในกลุ่มเดียวกับ ego (proportion same: S measure)

  • EI index

  • Odds ratio & Log odds ratio

  • Yule’s Q

## จำนวนเพื่อนร่วมงานแต่ละรูปแบบ
Krackhardt_HighTech$Friendship %>%
  data.frame() %>%
  rownames_to_column("ego") %>%
  pivot_longer(cols= -ego, names_to = "alter", values_to = "tie") |> 
  left_join(y = ego_data, by = "ego") |> 
  rename(department_ego = 4) |> 
  left_join(y = ego_data, by = join_by("alter" == "ego")) |> 
  rename(department_alter = 5) |> 
  filter(ego != alter) |> 
  group_by(ego,tie,department_ego, department_alter) |> count() |> 
  mutate(type = case_when(
    tie >0 & department_ego == department_alter ~ "a",
    tie >0 & department_ego != department_alter ~ "b",
    tie  == 0 & department_ego == department_alter ~ "c",
    tie == 0 & department_ego != department_alter ~ "d",
  ))
# A tibble: 146 × 6
# Groups:   ego, tie, department_ego, department_alter [146]
   ego     tie department_ego department_alter     n type 
   <chr> <int>          <int>            <int> <int> <chr>
 1 A01       0              4                0     1 d    
 2 A01       0              4                1     3 d    
 3 A01       0              4                2     8 d    
 4 A01       0              4                3     3 d    
 5 A01       1              4                1     2 b    
 6 A01       1              4                4     3 a    
 7 A02       0              4                0     1 d    
 8 A02       0              4                1     4 d    
 9 A02       0              4                2     8 d    
10 A02       0              4                3     2 d    
# ℹ 136 more rows

5.1 categorical attributes

  • สัดส่วนความคล้าย (proportion same: S)

\[ S = \frac{ego \cap alter}{Total} \]

  • E-I Index (Krackhardt & Stern, 1988) เป็นตัวชี้วัดที่ตรงข้ามกับ homophily โดยค่าที่มากขึ้นหมายถึง heterophily สูงขึ้น

\[ EI = \frac{E-I}{E+I} \]

โดยที่ E = จำนวน ties ไปยัง alters ที่อยู่ต่างกลุ่มกับ ego (external ties) และI = จำนวน ties ไปยัง alters ที่อยู่ในกลุ่มเดียวกับ ego (internal ties)

ดังนั้นถ้า EI = -1 หมายถึง ego มีความสัมพันธ์กับ alter ที่เหมือนกับตัวเอง 100%, EI = 0 หมายถึง ego มีความสัมพันธ์กับ alter ที่สมดุลระหว่างคนที่เหมือนกับแตกต่างกับตนเอง ส่วน EI = 1 หมายถึง ego มีความสัมพันธ์กับ alter ที่แตกต่างกับตนเอง

5.1 categorical attributes

สมมุติว่าวัตถุประสงค์คือการวัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของแผนกงานที่ทำงาน การคำนวณค่าสัดส่วนความคล้ายสามารถดำเนินการได้ง่าย ๆ ดังนี้ การคำนวณดัชนีต่าง ๆ สามารถทำได้ผ่าน KruRooSocNet ดังนี้

analyze_categorical_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = ego_data,
  category_col = "Department"
) |> glimpse()
Rows: 21
Columns: 11
$ node                  <chr> "A01", "A02", "A03", "A04", "A05", "A06", "A07",…
$ `Ego's department`    <int> 4, 4, 2, 4, 2, 1, 0, 1, 2, 3, 3, 1, 2, 2, 2, 4, …
$ a                     <int> 3, 1, 2, 3, 3, 3, 0, 0, 0, 0, 1, 2, 1, 1, 5, 2, …
$ b                     <int> 2, 2, 0, 3, 4, 3, 0, 1, 0, 7, 12, 2, 1, 1, 3, 0,…
$ c                     <int> 0, 2, 5, 0, 4, 1, 0, 4, 7, 2, 1, 2, 6, 6, 2, 1, …
$ d                     <int> 15, 15, 13, 14, 9, 13, 20, 15, 13, 11, 6, 14, 12…
$ `Proportion same (S)` <dbl> 0.60000000, 0.33333333, 1.00000000, 0.50000000, …
$ `EI index`            <dbl> -0.2000000, 0.3333333, -1.0000000, 0.0000000, 0.…
$ `Odds ratio`          <dbl> Inf, 3.750000, Inf, Inf, 1.687500, 13.000000, NA…
$ `Log odds ratio`      <dbl> Inf, 1.3217558, Inf, Inf, 0.5232481, 2.5649494, …
$ `Yule's Q`            <dbl> 1.0000000, 0.5789474, 1.0000000, 1.0000000, 0.25…

Realized Homophily = Availability + Preference Homophily

  • Availability Homophily = ความคล้ายคลึงระหว่าง ego กับ alters ที่เกิดขึ้นจากโครงสร้างของเครือข่าย (โอกาสในธรรมชาติ) ไม่ได้เกิดขึ้นจากการเลือกของ ego แต่เกิดขึ้นจากสัดส่วนของประชากรที่มีอยู่ในเครือข่าย

  • Preference Homophily = ระดับของ Ego-Alter Similarity ที่เกิดขึ้นจาก ความชอบส่วนตัวของ Ego ในการเลือก Alters

ปัญหาคือเราจะสามารถวัด Preference Homophily ได้อย่างไร เพราะในความเป็นจริง Availability Homophily อาจเป็นตัวแปรแทรกซ้อนที่ทำให้ไม่สามารถสังเกต Preference Homophily ได้อย่างถูกต้อง

  • เปรียบเทียบความถี่ประเภท alter: a, b, c และ d กับ expected frequency ทางทฤษฎี –> เทียบเท่ากับการทำ contingency table ระหว่างการเป็นเพื่อนกัน กับ การเป็นบุคคลประเภทเดียวกัน

  • เปรียบเทียบอัตราส่วนการเป็นเพื่อนกับบุคคลประเภทหนึ่ง กับ อัตราส่วนการไม่เป็นเพื่อนกับบุคคลประเภทนั้น –> [a/b]/[c/d] ค่านี้เรียกว่า Odd Ratio

Odd Ratio

\[ OR = \frac{a/b}{c/d} = \frac{a \times d}{b \times c} \]

  • จำนวนเพื่อนร่วมงานที่อยู่ใน department เดียวกับ ego (a)

  • จำนวนเพื่อนร่วมงานที่อยู่คนละ department กับ ego (b)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่ department เดียวกับ ego (c)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่คนละ department กับ ego (d)

การแปลความหมาย

  • OR = 1 แปลว่าไม่มีความสัมพันธ์ระหว่างการเป็นเพื่อนกันในเครือข่ายกับการมีคุณลักษณะเดียวกันในเครือข่าย

  • OR > 1 แสดงว่า ego มีแนวโน้มเลือก alter ที่มีคุณลักษณะเหมือนกับตัวเอง

  • 0 < OR < 1 แสดงว่า ego มีแนวโน้มเลือก alter ที่มีคุณลักษณะแตกต่างจากตัวเอง

# A tibble: 21 × 11
   node  `Ego's department`     a     b     c     d `Proportion same (S)`
   <chr>              <int> <int> <int> <int> <int>                 <dbl>
 1 A01                    4     3     2     0    15                 0.6  
 2 A02                    4     1     2     2    15                 0.333
 3 A03                    2     2     0     5    13                 1    
 4 A04                    4     3     3     0    14                 0.5  
 5 A05                    2     3     4     4     9                 0.429
 6 A06                    1     3     3     1    13                 0.5  
 7 A07                    0     0     0     0    20                NA    
 8 A08                    1     0     1     4    15                 0    
 9 A09                    2     0     0     7    13                NA    
10 A10                    3     0     7     2    11                 0    
# ℹ 11 more rows
# ℹ 4 more variables: `EI index` <dbl>, `Odds ratio` <dbl>,
#   `Log odds ratio` <dbl>, `Yule's Q` <dbl>

Yule’s Q coefficient

\[ Q = \frac{ad-bc}{ad+bc} \]

  • Q = 1 หมายความว่า ego มีความสัมพันธ์กับ alter ที่มีคุณลักษณะเฉพาะเหมือนกับตนเอง

  • Q = 0 หมายความว่า ego มีแนวโน้มที่จะมีความสัมพันธ์กับ alter อย่างสมดุล ระหว่าง alter ที่มีคุณลักษณะเหมือนและแตกต่างกับ ego

  • Q = -1 ….

analyze_categorical_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = ego_data,
  category_col = "Department"
) |> 
select(node, 11)
# A tibble: 21 × 2
   node  `Yule's Q`
   <chr>      <dbl>
 1 A01        1    
 2 A02        0.579
 3 A03        1    
 4 A04        1    
 5 A05        0.256
 6 A06        0.857
 7 A07       NA    
 8 A08       -1    
 9 A09       NA    
10 A10       -1    
# ℹ 11 more rows

Yule’s Q coefficient

ลองพิจารณาเปรียบเทียบความคล้ายขอ A03 กับ alter และ A08 กับ alter

analyze_categorical_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = ego_data,
  category_col = "Department") |> 
  filter(node %in% c("A03", "A08")) %>% 
  select(node, a, b, c, d,11)
# A tibble: 2 × 6
  node      a     b     c     d `Yule's Q`
  <chr> <int> <int> <int> <int>      <dbl>
1 A03       2     0     5    13          1
2 A08       0     1     4    15         -1

Ego & Alter Similarity

par(mar=c(0,1,1,0))
plot(a08,
edge.arrow.size = 0.1,
edge.arrow.width =0.1,
vertex.color = ifelse(V(a08)$department == V(a08)$department[2], 
                      "steelblue","maroon"),
main = "S = 0, EI = 1, OR = 0, Yule = 1"
)

Ego & Alter Similarity

a06 <- subgraph_from_edges(full_g, 
                           E(full_g)[.from("A06")])
add_a06 <- setdiff(V(full_g), V(a06))
a06 <- add_vertices(a06, nv = length(add_a06), 
                    name = paste0("A", add_a06),
                    attr = list(department = V(full_g)$department[add_a06]))
par(mar=c(0,1,1,0))
plot(a06,
edge.arrow.size = 0.1,
edge.arrow.width =0.1,
vertex.color = ifelse(V(a06)$department == V(a06)$department[2], 
                      "steelblue","maroon"),
main = "S = 0.5, EI = 0, OR = 13, Yule = 0.86"
)

5.2 continuous attributes

เราสามารถใช้แนวทางที่คล้ายกับการวัด Ego-Alter Similarity สำหรับตัวแปรเชิงหมวดหมู่ (Categorical) มาประยุกต์ใช้กับตัวแปรเชิงต่อเนื่อง (Continuous) เช่น อายุ หรือประสบการณ์ทำงาน

  • ค่า absolute difference ระหว่างคุณลักษณะของ ego กับ alter แนวคิดนี้คล้าย ๆ S measure ใน categorical attribute โดยค่าเท่ากับ 0 หมายถึงไม่มีความแตกต่างระหว่าง ego กับ alter ในคุณลักษณะนั้น

  • ปัญหาของการวัดด้วยวิธีการนี้ัคือเป็นการเปรียบเทียบความแตกต่างระหว่าง ego กับ alter แต่ละคู่ตรง ๆ แต่ไม่ได้พิจารณาแนวโน้มโดยรวมของเครือข่ายว่ามีการแจกแจงอย่างไร ดังนั้นความแตกต่างระหว่าง ego กับ alter ที่มีคุณลักษณะที่พิจารณาต่ำสุดและสูงสุดของกลุ่ม ก็จะมีค่า absolute difference สูงเสมอ

5.2 continuous attributes

  • วิธีการที่น่าจะปลอดภัยกว่าในการวัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่เป็นเชิงปริมาณคือการพิจารณาทั้งกลุ่มที่ ego เลือกเป็นเพื่อน และกลุ่มที่ ego ไม่ได้เลือกเป็นเพื่อน ขั้นตอนวิธีมีดังนี้

  • สร้างคะแนนตัวชี้วัดความแตกต่างระหว่าง ego กับ โหนดอื่น ๆ ซึ่งมีทั้งเพื่อนและไม่ใช่เพื่อนในเครือข่ายของ ego

    • absolute difference

    • squared difference

    • \(I_{ij} = 1-\frac{|X_i-X_j|}{max(X)-min(X)}\) <– ความหมายจะเป็นความคล้ายคลึงแทน

  • จัดการข้อมูลออกเป็น 2 คอลัมน์ คอลัมน์แรกเป็นคะแนนตัวชี้วัด และคอลัมน์ที่สองเป็นสถานะของ tie ระหว่าง ego และ alter น้ัน ๆ

  • คำนวณ correlation ระหว่างตัวแปรทั้งสอง (เราเรียก correlation นี้ว่า point-biserial correlation)

การแปลผลวิธีการนี้จะคล้ายกับ EI Index ถ้า correlation มีค่าเป็นบวกมาก แสดงว่ามีความสัมพันธ์ระหว่างการเป็นเพื่อนกับความแตกต่าง/ความคล้ายของคุณลักษณะที่พิจารณา แสดงว่า ego มีแนวโน้มเลือกคบเพื่อนที่มีคุณลักษณะที่แตกต่างจากตนเอง (heterophily)

5.2 continuous attributes

การคำนวณค่าดัชนีดังกล่าวทำได้ค่อนข้างยากหากเขียน script เอง ดังนั้นเราสามารถใช้ฟังก์ชันใน KruRooSocNet ช่วยได้

analyze_continuous_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = Krackhardt_HighTech$Attributes %>% rownames_to_column("node"),
  attribute_col = "Age"
) %>% glimpse(80)
Rows: 21
Columns: 6
$ node                    <chr> "A02", "A03", "A04", "A05", "A06", "A07", "A08…
$ ego_attr_value          <dbl> 42, 40, 33, 32, 59, 55, 34, 62, 37, 46, 34, 48…
$ abs_diff_value          <dbl> 2.40, 0.30, 7.05, 8.10, 20.25, 16.05, 6.00, 23…
$ corr_tie_abs_diff       <dbl> -4.239166e-02, -1.386851e-01, -3.710282e-01, 1…
$ corr_tie_squared_diff   <dbl> -0.12697247, -0.14686771, -0.32499271, 0.10757…
$ corr_tie_identity_coeff <dbl> 4.239166e-02, 1.386851e-01, 3.710282e-01, -1.1…
analyze_continuous_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = Krackhardt_HighTech$Attributes %>% rownames_to_column("node"),
  attribute_col = "Age"
) %>% 
arrange(node)
   node ego_attr_value abs_diff_value corr_tie_abs_diff corr_tie_squared_diff
1   A01             33           7.05     -3.226872e-01           -0.28059031
2   A02             42           2.40     -4.239166e-02           -0.12697247
3   A03             40           0.30     -1.386851e-01           -0.14686771
4   A04             33           7.05     -3.710282e-01           -0.32499271
5   A05             32           8.10      1.127650e-01            0.10757363
6   A06             59          20.25     -3.153069e-01           -0.23275795
7   A07             55          16.05                NA                    NA
8   A08             34           6.00     -1.938558e-01           -0.13049333
9   A09             62          23.40                NA                    NA
10  A10             37           2.85     -3.415357e-02            0.05249410
11  A11             46           6.60      7.419743e-02            0.07315392
12  A12             34           6.00     -3.603666e-01           -0.27413222
13  A13             48           8.70     -2.070848e-01           -0.10244533
14  A14             43           3.45     -1.017882e-01           -0.09251492
15  A15             40           0.30      1.957012e-01            0.27505549
16  A16             27          13.35     -1.043846e-01           -0.12721608
17  A17             30          10.20      2.066842e-18            0.02757054
18  A18             33           7.05      2.294515e-02           -0.05596607
19  A19             32           8.10     -2.208262e-01           -0.31614015
20  A20             38           1.80     -5.396740e-02           -0.10847012
21  A21             36           3.90     -2.308509e-01           -0.22811874
   corr_tie_identity_coeff
1             3.226872e-01
2             4.239166e-02
3             1.386851e-01
4             3.710282e-01
5            -1.127650e-01
6             3.153069e-01
7                       NA
8             1.938558e-01
9                       NA
10            3.415357e-02
11           -7.419743e-02
12            3.603666e-01
13            2.070848e-01
14            1.017882e-01
15           -1.957012e-01
16            1.043846e-01
17           -3.390912e-18
18           -2.294515e-02
19            2.208262e-01
20            5.396740e-02
21            2.308509e-01

6. Ego-Network Structural Shape Measures

ตัวชี้วัด local node-level กลุ่มสุดท้ายคือการวัดลักษณะโครงสร้างของเครือข่าย

  • Structure Holes หมายถึง เครือข่ายที่ alters ภายใน ego network ไม่มีความสัมพันธ์กัน หรือมีความสัมพันธ์กันน้อยจนเกิดเป็นช่องว่างในการแลกเปลี่ยน/สื่อสารระหว่าง alters

  • Whole-Network measures เช่น density, centralization, number of component, average distance ทั้งหมดนี้ช่วยอธิบายว่า ego มีอิทธิพลมากน่้อยแค่ไหนใน local network

6.1 Structure Holes Measures

เครือข่ายที่มี structural holes คือเครือข่ายของ ego ที่ alters ไม่ได้มีความสัมพันธ์ซึ่งกันและกัน หรือมีความสัมพันธ์กันน้อย

  • ในกรณีดังกล่าว ego จะมีบทบาทเป็นตัวกลางที่เรียกว่า Bridge หรือ Broker ที่เชื่อมโยง alters เข้าด้วยกัน

  • เครือข่ายของ ego ลักษณะดังกล่าวมีแนวโน้มที่ ego จะมีความสำคัญมากในเครือข่าย เพราะสามารถเข้าถึงข้อมูลและทรัพยากรที่หลากหลาย และมีอำนาจการควบคุมการไหลของข้อมูลและทรัพยากรในเครือข่ายได้สูง

เครือข่ายของ ego ที่มี structural holes จำนวนมากมีลักษณะสำคัญ 2 ลักษณะได้แก่

  • มีขนาดใหญ่ (มี alters จำนวนมาก)

  • มีความหนาแน่นต่ำ (alters มีความสัมพันธ์ซึ่งกันและกันน้อย)

6.1 Structure Holes Measures

่ีตัวชี้วัดสำคัญ 2 ตัวที่สามารถใช้บ่งชี้ Structure Holes

  • Effect Size (ES), Normalized Effect Size (NES)

  • Constraint

6.1 Structure Holes: Effect Size

\[ ES_i = \sum_{j}(1-\sum_{k} p_{ik}m_{kj}) \] โดยที

  • i คือ ego, j คือ alters, k คือ alters ที่เชื่อมโยงกับ alters j

  • \(p_{ik}\) คือ row total-normalized tie strength ได้จาก adjacency matrix (วัดความสัมพันธ์ระหว่าง ego กับ alter j)

  • \(m_{kj}\) คือ row max-normalized tie strength ได้จาก adjacency matrix (วัดความสัมพันธ์ระหว่าง alter j กับ alter k)

ดังนั้นถ้า effect size สูง แสดงว่า เครือข่าย ego มีโครงสร้างแบบช่องว่างมาก ego มีแนวโน้มมีบทบาทเป็น bridge หรือ broker ในเครือข่าย

6.1 Structure Holes: Constraint

Burt’s Constraint ใช้สำหรับวัดข้อจำกัดของ ego ในการควบคุมหรือเข้าถึงทรัพยากรภายในเครือข่าย หรือ ข้อจำกัดในการเป็นตัวกลางของ ego ดังนั้นตัวชี้วัดนี้จึงเป็นสเกลกลับด้านของ effect size ดังนั้น ถ้า constraint มาก แสดงว่า เครือข่ายมีแนวโน้มที่จะมี structural holes น้อยลง

  • pairwise constraint: ตัวชี้วัดว่า alter j มีความสามารถในการจำกัดอิทธิพลของ ego i มากน้อยแค่ไหน

\[ c_{ij} = \left( p_{ij} + \sum_{k} p_{ik} \cdot p_{kj} \right)^2 \]

โดยที่ \(p_{ij}\) คือ row total-normalized tie strength ระหว่าง ego i กับ alter j ส่วน \(p_{ij} \cdot p_{kj}\) คือ ความสัมพันธ์ทางอ้อมที่เชื่อมโยง ego i กับ alter j ผ่าน alter k

6.1 Structure Holes: Constraint

Burt’s Constraint ใช้สำหรับวัดข้อจำกัดของ ego ในการควบคุมหรือเข้าถึงทรัพยากรภายในเครือข่าย หรือ ข้อจำกัดในการเป็นตัวกลางของ ego ดังนั้นตัวชี้วัดนี้จึงเป็นสเกลกลับด้านของ effect size ดังนั้น ถ้า constraint มาก แสดงว่า เครือข่ายมีแนวโน้มที่จะมี structural holes น้อยลง

  • total constraint: ผลรวมของ pairwise constraint ของ alter j ทุกคน ใน ego i แสดงปริมาณข้อจำกัดในภาพรวม

\[ c_i = \sum_{j} c_{ij} \]

6.1 Structure Holes: ES, Constraint

การคำนวณค่า effect size และ constraint สามารถทำได้ด้วย KruRooSocNet โดยใช้ฟังก์ชัน calculate_effect_size() และ calculate_constraint() ดังตัวอย่าง

calculate_effect_size(
  adj_matrix = full_g %>% 
    as_adjacency_matrix() %>% 
    as.matrix(),
  weight = F,
  directed = TRUE
) %>% head(10)
   node effect_size
1   A01    3.600000
2   A02    2.666667
3   A03    1.500000
4   A04    3.666667
5   A05    4.714286
6   A06    4.166667
7   A07    0.000000
8   A08    1.000000
9   A09    0.000000
10  A10    6.857143

6.1 Structure Holes: ES, Constraint

การคำนวณค่า effect size และ constraint สามารถทำได้ด้วย KruRooSocNet โดยใช้ฟังก์ชัน calculate_effect_size() และ calculate_constraint() ดังตัวอย่าง

calculate_constraint(
  adj_matrix = full_g %>% 
    as_adjacency_matrix() %>% 
    as.matrix()
)
# A tibble: 179 × 3
   ego   alter constraint
   <chr> <chr>      <dbl>
 1 A01   A02      0.0425 
 2 A01   A04      0.0640 
 3 A01   A08      0.0126 
 4 A01   A11      0.0252 
 5 A01   A12      0.0391 
 6 A01   A15      0.00984
 7 A01   A16      0.0334 
 8 A01   A17      0.0403 
 9 A01   A19      0.0158 
10 A01   total    0.283  
# ℹ 169 more rows

6.1 Structure Holes: ES, Constraint

a06_ego <- subgraph_from_edges(full_g, 
                           E(full_g)[.from("A06")])
calculate_effect_size(
  adj_matrix = a06_ego %>% 
    as_adjacency_matrix() %>% 
    as.matrix()) %>% 
filter(node == "A06")
  node effect_size
1  A06           6
# A tibble: 7 × 3
  ego   alter constraint
  <chr> <chr>      <dbl>
1 A06   A02       0.0278
2 A06   A07       0.0278
3 A06   A09       0.0278
4 A06   A12       0.0278
5 A06   A17       0.0278
6 A06   A21       0.0278
7 A06   total     0.167 

6.1 Structure Holes: ES, Constraint

6.1 Structure Holes: ES, Constraint

a06_ego <- make_ego_graph(
  full_g, V(full_g)["A06"],
  mode = "out") 
calculate_effect_size(
  adj_matrix = a06_ego[[1]] %>% 
    as_adjacency_matrix() %>% 
    as.matrix()) %>% 
filter(node == "A06")
  node effect_size
1  A06    4.166667
calculate_constraint(
  adj_matrix = a06_ego[[1]] %>% 
    as_adjacency_matrix() %>% 
    as.matrix()) %>% 
filter(ego == "A06")
# A tibble: 8 × 3
  ego   alter constraint
  <chr> <chr>      <dbl>
1 A06   A02       0.0266
2 A06   A07       0.0183
3 A06   A09       0.0213
4 A06   A12       0.0301
5 A06   A15       0.0244
6 A06   A17       0.145 
7 A06   A21       0.0346
8 A06   total     0.301 

6.1 Structure Holes: ES, Constraint

6.1 Structure Holes: ES, Constraint

library(ggrepel)
calculate_effect_size(
  adj_matrix = full_g %>% 
    as_adjacency_matrix() %>% 
    as.matrix(),
  weight = F,
  directed = TRUE
) %>% 
  bind_cols(
    calculate_constraint(
      adj_matrix = full_g %>% 
        as_adjacency_matrix() %>% 
        as.matrix()
    ) %>% 
      filter(alter == "total")
  ) %>% 
  bind_cols(
    out_degree = degree(full_g, mode = "out")
  ) %>% 
  mutate(norm_ES = ifelse(out_degree ==0 , effect_size,
    effect_size / out_degree)) %>%
  ggplot(aes(x = effect_size, y = constraint))+
  geom_text_repel(aes(label = node, size = out_degree))

6.1 Structure Holes: ES, Constraint

6.1 Structure Holes: Shadow Ego

shadow ego คือ โหนดที่เชื่อมโยงกับ alters ใน ego network แต่ไม่ได้เป็น alters ของ ego โดยตรง โดย shadow ego มีความสำคัญในการเชื่อมโยงเครือข่ายของ ego และเครือข่ายอื่น ๆ ดังนั้น shadow ego มีบทบาทเป็น bridge หรือ broker ในเครือข่าย

calculate_constraint(
      adj_matrix = full_g %>% 
        as_adjacency_matrix() %>% 
        as.matrix()
    ) %>% 
  filter(ego == "A17") %>% 
  arrange(desc(constraint))
# A tibble: 19 × 3
   ego   alter constraint
   <chr> <chr>      <dbl>
 1 A17   total    0.196  
 2 A17   A11      0.0250 
 3 A17   A12      0.0214 
 4 A17   A05      0.0175 
 5 A17   A04      0.0174 
 6 A17   A06      0.0161 
 7 A17   A21      0.0145 
 8 A17   A19      0.0120 
 9 A17   A01      0.0118 
10 A17   A02      0.0111 
11 A17   A15      0.0102 
12 A17   A10      0.00813
13 A17   A14      0.00606
14 A17   A09      0.00512
15 A17   A08      0.00485
16 A17   A03      0.00444
17 A17   A16      0.00410
18 A17   A07      0.00337
19 A17   A20      0.00294

6.2 Whole-Network Measures

ใช้หลักการเดียวกับการวัดคุณลักษณะของเครือข่ายในระดับโครงสร้างของเครือข่ายทั้งหมด แต่การคำนวณจะคำนวณบนเครือข่าย ego และมีการลบ ego ออกก่อนการคำนวณ

  • Density: ความหนาแน่นของเครือข่าย หมายถึง สัดส่วนของ alters ที่มีความเชื่อมโยงถึงกัน โดยคำนวณจาก จำนวนเส้นเชื่อมโยงจริงระหว่าง alters หารด้วยจำนวนเส้นเชื่อมโยงที่เป็นไปได้ทั้งหมด เครือข่ายของ ego ที่มีค่า density สูงแสดงว่า alters มีความสัมพันธ์กันมาก ซึ่งแนวคิดนี้มีความสอดคล้องกับแนวคิดของ constraint

  • Centralization: คือการวัดว่า อิทธิพลหรือความสัมพันธ์ในเครือข่ายของ ego ถูกกระจุกอยู่ที่ alter ตัวใดตัวหนึ่งหรือไม่ ผ่านการพิจารณาการกระจายของ centrality index ภายใน ego network (ไม่นับรวม ego) โดยปกติค่า centrality จะถูก normalized ให้อยู่ในช่วง [0,1] โดยถ้ามีค่าใกล้ 1 แสดงว่า alters ส่วนใหญ่เชื่อมโยงกับ alter เดียว

  • จำนวน ของ Component (เครือข่ายย่อยที่มีการเชื่อมโยงภายในแต่ไม่เชื่อมโยงกับกลุ่มอื่น): การที่ ego network มีจำนวน component มาก บ่งชี้ว่า ego มีความสัมพันธ์กับ alter ที่มีบริบททางสังคมที่แตกต่างกัน ซึ่งสะท้อนว่า ego มีแนวโน้มเป็นตัวกลางในการเชื่อมโยงกลุ่มต่าง ๆ ในเครือข่าย

6.2 Whole-Network Measures

  • ขนาดของ component ที่ใหญ่ที่สุด : เป็นอีกตัวชี้วัดที่บ่งชี้อิทธิพลของ ego ได้ทางหนึ่ง กล่าวคือ หากขนาดของ component ใน ego network มีขนาดใหญ่ แสดงว่า alters หลายคนสามารถเชื่อมโยงกันเองได้แม้ไม่มี ego

  • average reciprocal distance หรือ compactness สามารถหาได้จาก geodesic distance ดังนี้

    • คำนวณ geodesic distance ระหว่าง alters ทุกคู่ใน ego network

    • หาส่วนกลับของระยะทางดังกล่าว (หากไม่มีเส้นเชื่อมโยงกำหนดให้ reciprocal = 0)

    • คำนวณค่าเฉลี่ยของค่าทั้งหมด ถ้ามีค่าสูงแสดงว่า alter ใน ego network มีความกระชับกันมาก

6.2 Whole-Network Measures

calculate_ego_structure(
 adj_matrix = full_g %>% 
    as_adjacency_matrix() %>% 
    as.matrix(),
 directed = TRUE,
 centralization_type = "degree",
 degree_mode = "out") %>% glimpse(80)
Rows: 21
Columns: 6
$ ego                       <chr> "A01", "A02", "A03", "A04", "A05", "A06", "A…
$ density                   <dbl> 0.4166667, 0.3444444, 0.5000000, 0.4761905, …
$ num_components            <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
$ largest_component_size    <dbl> 9, 10, 6, 7, 10, 7, 3, 5, 6, 8, 14, 8, 2, 6,…
$ compactness               <dbl> 0.8055556, 0.7296296, 0.8333333, 0.8571429, …
$ centralization_degree_out <dbl> 0.5833333, 0.5444444, 0.5000000, 0.5238095, …

6.2 Whole-Network Measures


Rows: 1
Columns: 6
$ ego                       <chr> "W1"
$ density                   <dbl> 0.3333333
$ num_components            <dbl> 2
$ largest_component_size    <dbl> 2
$ compactness               <dbl> 0.3333333
$ centralization_degree_all <dbl> 0.1666667



Rows: 1
Columns: 6
$ ego                       <chr> "W1"
$ density                   <dbl> 0.3333333
$ num_components            <dbl> 2
$ largest_component_size    <dbl> 2
$ compactness               <dbl> 0.3333333
$ centralization_degree_all <dbl> 0.1666667